let Axios = require('./core/Axios')
let extend = require('./utils/extend')

function createInstance (config) {
    // 1 实例化一个上下文对象，拥有 .属性调用函数
    let context = new Axios(config)

    // 2 将 实例对象 硬绑定到Axios的 请求函数 中
    //   此时instance是一个函数，可以传入参数,实现调用 instance({})..
    let instance = Axios.prototype.request.bind(context)

    // 3 将 Axios.protype 添加到 实例对象instance中去
    //   此时instance将拥有 instance.get、post...
    extend(instance, Axios.prototype, context)

    // 4 将 context对象身上的属性 添加到 实例对象instance中去
    //   此时instance将拥有 instance.defaultes、interceptors...
    extend(instance, context)

    return instance
}

const axios = createInstance({ default: '放置一些默认值进来' })

module.exports = axios;